home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / spectcl-.000 / spectcl- / usr / local / SpecTcl-0.1a / resize.tk < prev    next >
Encoding:
Text File  |  1995-11-06  |  3.2 KB  |  114 lines

  1. # SpecTcl, by S. A. Uhler
  2. # Copyright (c) 1994-1995 Sun Microsystems, Inc.
  3. #
  4. # See the file "license.txt" for information on usage and redistribution
  5. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. #
  7. # manage resize behavior of rows and columns
  8. # Each row or column is either resizable, or not.  The data associated
  9. # with the resize behavior is kept in a list, one element per row/col, 
  10. # kept in the frame's widget array in the options resize_row and
  11. # resize_column.
  12.  
  13. # Each element may have the following values:
  14. #    0  don't resize (the default)
  15. #    1  don't resize (Specified by the user)
  16. #    2  resize - picked by the ui builder
  17. #    3  resize - picked by the user
  18.  
  19. # In addition, min_row and min_column is a list of minimum row and
  20. # column sizes, which track along with the resize behavior
  21.  
  22. # insert a new row/column onto the resize list
  23. #   table:  Which frame the grid belongs to
  24. #   what:   row/column
  25. #   index:  Which row or column #
  26.  
  27. proc resize_insert {table what index {resize 0} {min 0}} {
  28.     global P
  29.     upvar #0 [winfo name $table] data
  30.     set index [expr $index/2 -1]
  31.     dputs $table $what $index
  32.     if {$index < 0} return
  33.     if {!$min} {set min $P(grid_spacing)}
  34.     if {[info exists data(resize_$what)]} {
  35.         dputs $data(resize_$what)
  36.         set data(resize_$what) [linsert $data(resize_$what) $index $resize]
  37.         set data(min_$what) [linsert $data(min_$what) $index $min]
  38.         arrow_shapeall .can $table $what
  39.     } else {
  40.         set data(resize_$what) $resize
  41.         set data(min_$what) $min
  42.     }
  43.     dputs $data(resize_$what) $data(min_$what)
  44. }
  45.  
  46. # delete a row or column from the resize list
  47.  
  48. proc resize_delete {table what index} {
  49.     upvar #0 [winfo name $table] data
  50.     global _Message
  51.     dputs $table $what $index
  52.     set index [expr $index/2 -1]
  53.     catch {
  54.         set data(resize_$what) [lreplace $data(resize_$what) $index $index]
  55.         set data(min_$what) [lreplace $data(min_$what) $index $index]
  56.         arrow_shapeall .can $table $what
  57.     }
  58. }
  59.  
  60. # initialize a resize list
  61. # Args are subject to change
  62. # This routine will probably go away
  63.  
  64. proc resize_init {table rows cols spacing} {
  65.     global P
  66.     upvar #0 [winfo name $table] data
  67.     dputs $table $rows $cols
  68.     while {[incr rows -1] >= 0} {
  69.         lappend row 0
  70.         lappend row2 $spacing
  71.     }
  72.     while {[incr cols -1] >= 0} {
  73.         lappend col 0
  74.         lappend col2 $spacing
  75.     }
  76.     if {![info exists data(resize_column)]} {
  77.         dputs column $col
  78.         set data(resize_column) $col
  79.         set data(min_column) $col2
  80.     }
  81.     if {![info exists data(resize_row)]} {
  82.         set data(resize_row) $row
  83.         set data(min_row) $row2
  84.         dputs row $col
  85.     }
  86. }
  87.  
  88. # set/clear/or toggle the resize behavior
  89.  
  90. proc resize_set {table what index {value ""}} {
  91.     set index [expr $index/2 -1]
  92.     upvar #0 [winfo name $table] data
  93.     
  94.     dputs $table $what $index <$data(resize_$what)>
  95.     set current [lindex $data(resize_$what) $index]
  96.     if {$value == ""} {
  97.         set value [expr {$current < 2 ? 3 : 1}]
  98.     }
  99.     set data(resize_$what) [lreplace $data(resize_$what) $index $index $value]
  100.     return $value
  101. }
  102.  
  103. # set the min size value
  104.  
  105. proc resizemin_set {table what index {value 0}} {
  106.     set index [expr $index/2 -1]
  107.     upvar #0 [winfo name $table] data
  108.     
  109.     dputs $table $what $index <$data(min_$what)>
  110.     set current [lindex $data(min_$what) $index]
  111.     set data(resize_$what) [lreplace $data(min_$what) $index $index $value]
  112.     return $value
  113. }
  114.